"use strict";

/**
 * tsc
 */
{
    let gulp = require("gulp");
    let source = require('vinyl-source-stream');
    let ts = require("gulp-typescript");

    // gulp.task("tsc", function () {
    //     return tsProject.src()
    //         .pipe(tsProject())
    //         .js.pipe(gulp.dest("bin"));
    // });

    exports.tsc = function(cb) {
        let tsProject = ts.createProject("tsconfig.json", {module:"system", declaration:true, outFile:"Common.js"});
        tsProject.src()
            .pipe(tsProject())
            // .pipe(gulp.dest("bin"));
            // .js.pipe(gulp.dest("bin"));
            // .js.pipe(source('common.js'))
            // .bundle()
            // .pipe(source('common.js'))
            .pipe(gulp.dest("bin"));
        cb && cb();
    }

    exports.tscd = function(cb) {
        let tsProject = ts.createProject("tsconfig.json", {module:"system", declaration:true, outFile:"Common.js"});
        tsProject.src()
            .pipe(tsProject())
            .dts.pipe(gulp.dest("bin"));
        cb && cb();
    }
}



/**
 * default
 */
{
    let gulp = require("gulp");
    let browserify = require("browserify");
    let source = require('vinyl-source-stream');
    let tsify = require("tsify");

    let uglify = require('gulp-uglify');
    let ts = require("gulp-typescript");
    let rename = require('gulp-rename');

    // let ts_loader = require("ts-loader");
    let paths = {
        pages: ['src/*.html']
    };

    // gulp.task("copy-html", function () {
    //     return gulp.src(paths.pages)
    //         .pipe(gulp.dest("dist"));
    // });

    // gulp.task("default", function () {
    //     return browserify({
    //         basedir: '.',
    //         debug: true,
    //         entries: ['src/main.ts'],
    //         cache: {},
    //         packageCache: {}
    //     })
    //     .plugin(tsify)
    //     .bundle()
    //     .pipe(source('bundle.js'))
    //     .pipe(gulp.dest("dist"));
    // });

    // gulp.task("default", function () {
    //     return browserify({
    //         basedir: './src',
    //         debug: true,
    //         entries: ['Main.ts'],
    //         cache: {},
    //         packageCache: {}
    //     })
    //     .plugin(tsify)
    //     .bundle()
    //     .pipe(source('bundle.js'))
    //     .pipe(gulp.dest("bin"));
    // });

    exports.default = function(cb) {
        // gen d.ts
        exports.tscd();

        // bundle
        browserify({
            basedir: './src',
            debug: true,
            entries: ['Common.ts'],
            cache: {},
            packageCache: {}
        })
        .plugin(tsify)
        .bundle()
        .pipe(source('Common.js'))
        .pipe(gulp.dest("bin"));
        cb && cb();
    }


    // function compileTS(...params) {
    //     console.log(params);
    //     let tsProject = ts.createProject("tsconfig.json");
    //     return tsProject.src()
    //         .pipe(tsProject())
    //         .js.pipe(gulp.dest("tmp"))
    // }

    // function bundle(...params) {
    //     console.log(params);
    //     return browserify({
    //         basedir: './tmp',
    //         debug: true,
    //         entries: ['main.js'],
    //         cache: {},
    //         packageCache: {}
    //     })
    //     // .plugin(tsify)
    //     .bundle()
    //     .pipe(source('bundle.js'))
    //     .pipe(gulp.dest("bin"));
    // }

    // gulp.task("default", gulp.series(compileTS, bundle));
}
